$webwork.htmlEncode($page.space.name) : Alternative for reloading the Geoserver catalog
This page last changed on May 18, 2007 by aaime.
I wanted to reload the Geoserver catalog without having to go through the web interface to fill out the form fields and click the buttons. reload_geoserver_catalog.pl #!/usr/bin/perl use HTTP::Request::Common; use HTTP::Cookies; use LWP 5.64; use strict; reload_geoserver_catalog(); sub reload_geoserver_catalog { my $browser = LWP::UserAgent->new; my $cookie_jar = HTTP::Cookies->new; #Perform geoserver authentication: my $url = 'http://localhost:8080/geoserver/admin/loginSubmit.do'; my $response = $browser->request(POST $url, ['username' => 'someusername', 'password' => 'somepassword', 'submit' => 'Submit']); die "Error: ", $response->header('WWW-Authenticate') || 'Error accessing', # ('WWW-Authenticate' is the realm-name) "\n ", $response->status_line, "\n at $url\n Aborting" unless $response->is_success; $cookie_jar->extract_cookies($response); #Load the new catalog: $url = 'http://localhost:8080/geoserver/admin/loadFromXML.do'; my $req = new HTTP::Request POST => $url; $cookie_jar->add_cookie_header($req); $response = $browser->request($req); #Finally, logout: $url = 'http://localhost:8080/geoserver/admin/logout.do'; $req = new HTTP::Request POST => $url; $cookie_jar->add_cookie_header($req); $response = $browser->request($req); } If you run Linux, you could also use the curl command, which in my understanding can accomplish the same goal. Here is a link which describes how to use curl. And here's how to do it in Java, from Sven Tschirner (be sure to adjust your addresses/ username/password): reload_geoserver_catalog.java // do login URL url=new URL("http://localhost:8080/geoserver/admin/loginSubmit.do?username=goeserverUser&password=geoserverPassword&submit=Submit"); URLConnection conn = url.openConnection(); InputStream inStream = conn.getInputStream(); String responseString=new String(); BufferedReader in = new BufferedReader(new InputStreamReader(inStream)); while(in.ready()) { responseString+= in.readLine(); } System.out.println("------------------------------------------------------\nresponseString:"+responseString); // reload String cookie=conn.getHeaderField("Set-Cookie"); System.out.println("cookie-text:"+cookie); cookie = cookie.substring(0, cookie.indexOf(";")); String cookieName = cookie.substring(0, cookie.indexOf("=")); String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length()); String cookieString=cookieName+"="+cookieValue; URL url2=new URL("http://localhost:8080/geoserver/admin/loadFromXML.do"); URLConnection conn2 = url2.openConnection(); conn2.setRequestProperty("Cookie",cookieString); // set the Cookie for request conn2.connect(); inStream = conn2.getInputStream(); in = new BufferedReader(new InputStreamReader(inStream)); responseString=new String(); while(in.ready()) { responseString+= in.readLine(); } System.out.println("------------------------------------------------------\nresponseString:"+responseString); //logout URL url3=new URL("http://localhost:8080/geoserver/admin/logout.do"); URLConnection conn3 = url3.openConnection(); conn3.setRequestProperty("Cookie",cookieString); conn3.connect(); inStream = conn3.getInputStream(); in = new BufferedReader(new InputStreamReader(inStream)); responseString=new String(); while(in.ready()) { responseString+= in.readLine(); } System.out.println("------------------------------------------------------\nresponseString:"+responseString); The next script for PHP register a new FeatureType and then reload the catalog, from Javier de la Torre (be sure to adjust your addresses/ username/password): register_featureType.php <?php //Register the new data type using geoserver configuration tool require_once('HttpClient.class.php'); //Generate a ramdom featureType name (layer) srand(time()); $layerName = (rand()%99999999); //Datastore from where the FeatureType will be created (database in PostGIS) $datastore="localhost_postgis"; $client = new HttpClient('localhost', 8080); $client->setDebug(false); //Authenticate in Geoserver $client->post('/geoserver/admin/loginSubmit.do', array ( 'username' =>"admin";, 'password' =>"geoserver", 'submit' => 'Submit' )); $headers = $client->getHeaders(); //Sorry, not very nice but I did not manage to make it work other way... $foo= explode(";",$headers['set-cookie']); $foo= explode("=",$foo[0]); $sessionArray = array('JSESSIONID' => $foo[1]); $client->setCookies($sessionArray); //Create a new Feature Type $client->post('/geoserver/config/data/typeNewSubmit.do', array ('selectedNewFeatureType' => $datastore.':::'.$layerName)); //edit feature details $client->post('/geov2/config/data/typeEditorSubmit.do', array ( 'styleId' => 'poi', 'SRS' => '4326', 'title' => 'temporary dataset:' . $layerName, 'minX' => '-180', 'minY' => '-90', 'maxX' => '180', 'maxY' => '90', 'keywords' => ' ', 'abstract' => 'temporary dataset:' . $layerName, 'schemaBase' => '--', 'action' => 'Submit' )); //Click Apply $client->post('/geov2/admin/saveToGeoServer.do', array ('submit' => 'Apply')); //Click Save $client->post('/geov2/admin/saveToXML.do', array ('submit' => 'Save')); ?> As of Geoserver 1.5.1 we have the ability to compute automatically bbox and SRS, in order to enable it the above code will have to set the autoGenerateExtent flag. //edit feature details $client->post('/geoserver/config/data/typeEditorSubmit.do', array ( 'styleId' => 'poi', 'title' => 'temporary dataset:' . $layerName, 'keywords' => ' ', 'abstract' => 'temporary dataset:' . $layerName, 'schemaBase' => '--', 'action' => 'Submit', 'autoGenerateExtent' => 'true' )); |
![]() |
Document generated by Confluence on Jan 16, 2008 23:26 |